﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Windows.Forms;
using System.Collections.ObjectModel;

namespace Cataloger
{
    [Serializable]
    public class Kategorie:KeyedCollection<string,IKategoria>
    {
		#region Delegates and Events (2) 

		// Events (2) 
        [field: NonSerialized]
        public event EventHandler<KategorieEventArgs> Dodano;

        [field: NonSerialized]
        public event EventHandler<KategorieEventArgs> Usunieto;

		#endregion Delegates and Events 

		#region Methods (6) 

		// Public Methods (3) 

        new public void Add(IKategoria kat)
        {
            if(!this.Items.Contains(kat))
            {
                this.Items.Add(kat);
                OnDodano(new KategorieEventArgs(kat));
            }
        }

        new public void Clear()
        {
            int zm=this.Items.Count;
            for (int i = 0; i < zm; i++)
            {
                this.Remove(Items[i]);
            }
        }

        new public void Remove(IKategoria kat)
        {
            if (this.Contains(kat))
            {
                this.Items.Remove(kat);
                OnUsunieto(new KategorieEventArgs(kat));
            }
        }
		// Protected Methods (3) 

        protected override string GetKeyForItem(IKategoria item)
        {
            return item.Nazwa;   
        }

        protected void OnDodano(KategorieEventArgs e)
        {
            if (Dodano != null)
            {
                Dodano(this, e);
            }
        }

        protected void OnUsunieto(KategorieEventArgs e)
        {
            if (Usunieto != null)
            {
                Usunieto(this, e);
            }
        }

		#endregion Methods 
    }
    public class KategorieEventArgs : EventArgs
    {
		#region Constructors (1) 

        public KategorieEventArgs(IKategoria kat)
        {
            this.KategoriaZm = kat;
        }

		#endregion Constructors 

		#region Properties (1) 

        public IKategoria KategoriaZm { get; private set; }

		#endregion Properties 
    }
}
